import ArcoResolver from '@arco-plugins/vite-vue'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import Components from 'unplugin-vue-components/vite'
import { defineConfig } from 'vite'
import viteCompression from 'vite-plugin-compression'
import viteImagemin from 'vite-plugin-imagemin'

export default defineConfig({
  base: '/',
  server: {
    host: '0.0.0.0', // 监听所有地址，包括局域网和公网 IP
    port: 5173, // 配置开发服务器端口为 3000
    proxy: {
      '/api': {
        // target: 'http://localhost:8080', // 代理目标地址
        target: 'http://10.10.15.11:9003', // 内网地址
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, ''), // 重写请求路径
      },
    },
    hmr: {
      overlay: false, // 禁用服务器错误遮罩层
    },
    open: true, // 自动打开浏览器
    cors: true, // 允许跨域
    strictPort: true, // 如果端口已被占用，直接退出
  },
  // 设置绝对路径@
  resolve: {
    alias: {
      '@': '/src',
    },
  },
  plugins: [
    vue({
      template: {
        compilerOptions: {
          isCustomElement: (tag) => /^micro-app/.test(tag),
        },
      },
    }),
    vueJsx(),
    Components({
      // 推测 ArcoResolver 可能导入有误，确保使用的是组件解析器。
      // 这里假设问题是类型不匹配，检查是否导入了正确的解析器类型。
      // 以下是保持代码结构，可能的修复方式，确保 ArcoResolver 返回的是 ComponentResolver 类型。
      resolvers: [ArcoResolver() as any],
    }),
    viteCompression(),
    viteImagemin({
      gifsicle: {
        optimizationLevel: 7,
        interlaced: false,
      },
      optipng: {
        optimizationLevel: 7,
      },
      mozjpeg: {
        quality: 20,
      },
      pngquant: {
        quality: [0.8, 0.9],
        speed: 4,
      },
      svgo: {
        plugins: [
          {
            name: 'removeViewBox',
            active: false,
          },
          {
            name: 'removeEmptyAttrs',
            active: false,
          },
        ],
      },
    }),
  ],
  build: {
    outDir: 'dist',
    assetsDir: 'assets',
    sourcemap: false,
    chunkSizeWarningLimit: 1500,
    terserOptions: {
      compress: {
        keep_infinity: true,
        drop_console: true,
        drop_debugger: true,
      },
    },
    minify: 'terser',
    rollupOptions: {
      output: {
        manualChunks(id) {
          if (id.includes('node_modules')) {
            return id.toString().split('node_modules/')[1].split('/')[0].toString()
          }
        },
      },
    },
  },
  css: {
    preprocessorOptions: {
      less: {
        // 可以在这里配置 less 相关选项
        javascriptEnabled: true,
      },
    },
  },
})
